﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;
using Entities;
using BLL;
using BLToolkit;

namespace CuaHangBangDia.NV
{
    public partial class frmNhanVien : Form
    {
        private IGeneralRepository<NhanVien> repNhanVien = new GeneralRepository<NhanVien>();
        private SapXepLV lvwColumnSorter;
        public frmNhanVien()
        {
            InitializeComponent();
            lvwColumnSorter = new SapXepLV();
            this.LV.ListViewItemSorter = lvwColumnSorter;
        }        
        private void frmNhanVien_Load(object sender, EventArgs e)
        {
            LoaDDSNV();
        }
        private void LoaDDSNV()
        {
            LoadNV(repNhanVien.LayTatCa().ToList());
           sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
        }
        private void LoadNV(List<NhanVien> ds)
        {
            LV.Items.Clear();
            foreach (NhanVien nv in ds)
            {
                ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                item.SubItems.Add(nv.HoTen.ToString());
                item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                item.SubItems.Add(nv.DiaChi.ToString());
                string gt = "Nam";
                if (nv.GioiTinh == false)
                    gt = "Nữ";
                item.SubItems.Add(gt);
                item.SubItems.Add(nv.CMND);
                item.SubItems.Add(nv.ChucVu.ToString());
                item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                item.SubItems.Add(nv.TinhTrang.ToString());
                item.SubItems.Add(nv.SDT.ToString());
                item.SubItems.Add(nv.QueQuan.ToString());                
                LV.Items.Add(item);
            }
        }      

        private void btnthoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnreset_Click(object sender, EventArgs e)
        {
            Reset();
        }
        private void Reset()
        {
            mtxtMa.Text = "";
            txtHoTen.Text = "";
            mtxtCMND.Text = "";
            txtChucVu.Text = "";
            txtdiachi.Text = "";
            txtQueQuan.Text = "";
            mtxtSDT.Text = "";
            txtTinhTrang.Text = "";
            dtpNgaysinh.Value = DateTime.Now;
            dtpngayvaolam.Value = DateTime.Now;
            lbchucvu.Text = "";
            lbcmnd.Text = "";
            lbDiachi.Text= "";
            lbHoTen.Text = "";
            lbMa.Text = "";
            lbquequan.Text = "";
            lbSdt.Text = "";
            lbtinhtrang.Text = "";
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            NhanVien nv = new NhanVien();
            if (KiemTraThem())
            {
                if(TrungMa(mtxtMa.Text))
                {
                    nv.MaNV = mtxtMa.Text;
                    nv.HoTen=txtHoTen.Text;
                    nv.DiaChi=txtdiachi.Text;
                    if (KiemTraNgaySinh(dtpNgaysinh.Value))
                    {
                        nv.NgaySinh = dtpNgaysinh.Value;
                        if (rdNam.Checked == true)
                            nv.GioiTinh = true;
                        else
                            nv.GioiTinh = false;
                        nv.ChucVu = txtChucVu.Text;
                        if (KiemTraSDT(mtxtSDT.Text)&& TrungSDT(mtxtSDT.Text))
                        {
                            nv.SDT = mtxtSDT.Text;
                            if (TrungCMND(mtxtCMND.Text))
                            {
                                nv.CMND = mtxtCMND.Text;
                                nv.QueQuan = txtQueQuan.Text;
                                nv.NgayVaoLam = dtpngayvaolam.Value;
                                nv.TinhTrang = txtTinhTrang.Text;
                                if (repNhanVien.Insert(nv))
                                {
                                    MessageBox.Show("Thêm Nhân Viên Thành Công", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    LoaDDSNV();
                                    Reset();
                                }
                                else
                                {
                                    MessageBox.Show("Thêm không thành công ", "Thông Báo");
                                }
                                sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
                            }
                            else
                                MessageBox.Show("Số CMND Đã tồn tại ", "Thông Báo");
                        }
                        else
                            MessageBox.Show("Số điện thoại Không đúng  Hoặc đã tồn tại", "Thông Báo");
                    }
                   else
                        MessageBox.Show("Ngày Sinh không hợp lệ ", "Thông Báo");
                }
                else
                    MessageBox.Show("Mã Nhân Viên bị trùng ", "Thông Báo");
            }
        }
        private NhanVien LayThongTinTuForm()
        {
            NhanVien nv = new NhanVien();            
                nv.MaNV = mtxtMa.Text;
                nv.HoTen = txtHoTen.Text;
                nv.NgaySinh = dtpNgaysinh.Value;
                nv.DiaChi = txtdiachi.Text;
                if (rdNam.Checked == true)
                    nv.GioiTinh = true;
                else
                    nv.GioiTinh = false;
                nv.ChucVu = txtChucVu.Text;
                nv.CMND = mtxtCMND.Text;
                nv.NgayVaoLam = dtpngayvaolam.Value;
                nv.SDT = mtxtSDT.Text;
                nv.TinhTrang = txtTinhTrang.Text;
                nv.QueQuan = txtQueQuan.Text;               
                return nv;
        }
        private bool KiemTraThem()
        {
            bool ma = false;
            if (mtxtMa.Text == "")
            {
                lbMa.Text = "Bạn chưa nhập Mã Nhân viên";
            }
            else
            {
                ma = true;
                lbMa.Text = "";
            }

            bool hotennv = false;
            if (txtHoTen.Text== "")
            {
               lbHoTen.Text = "Bạn  chưa nhập Họ Tên";
            }
            else
            {
                hotennv = true;
                lbHoTen.Text = "";
            }

            bool diachi = false;
            if (txtdiachi.Text == "")
            {
                lbDiachi.Text = "Bạn chưa Nhập Địa Chỉ";
            }
            else
            {
                diachi = true;
                lbDiachi.Text = "";
            }
            bool cmnd = false;
            if (mtxtCMND.Text == "")
            {
                lbcmnd.Text = "Bạn chưa Nhập CMND";
            }
            else
            {
                cmnd = true;
                lbcmnd.Text = "";
            }

            bool chucvu = false;
            if (txtChucVu.Text == "")
            {
                lbchucvu.Text = "Bạn chưa Nhập Chức vụ";
            }
            else
            {
                chucvu = true;
                lbchucvu.Text = "";
            }
            bool tinhtrang = false;
            if (txtTinhTrang.Text == "")
            {
                lbtinhtrang.Text = "Bạn Chưa Nhập Tình trạng làm việc";
            }
            else
            {
                tinhtrang = true;
                lbtinhtrang.Text = "";
            }

            bool sdt = false;
            if (mtxtSDT.Text == "")
            {
                lbSdt.Text = "Bạn chưa Nhập Số Điện Thoại";
            }
            else
            {
                sdt = true;
                lbSdt.Text = "";
            }
            bool que = false;
            if (mtxtCMND.Text == "")
            {
                lbquequan.Text = "Bạn chưa Nhập Quê Quán";
            }
            else
            {
                que = true;
                lbquequan.Text = "";
            }
            return(ma && hotennv && diachi && chucvu && sdt && cmnd && tinhtrang  && que);
        }
        private bool KiemTraNgaySinh(DateTime ns)
        {
            List<NhanVien> kq = repNhanVien.GetAll().ToList();
            foreach (NhanVien sv in kq)
            {
                if ((DateTime.Today.Year) - (dtpNgaysinh.Value.Year) < 18 || (DateTime.Today.Year) - (dtpNgaysinh.Value.Year) > 55)
                {
                    //MessageBox.Show("Ngày Sinh không hợp lệ (Nhập tuổi lớn hơn 18 và không được quá 55)", "Thông Báo");
                    return false;
                }

            }
            return true;
        }

        private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");                
            }

            else
            {
                e.Handled = false;                
            }
        }

        private void txtdiachi_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");
            }

            else
            {
                e.Handled = false;
            }
        }

        private void txtChucVu_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");
            }

            else
            {
                e.Handled = false;
            }
        }

        private void txtQueQuan_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");
            }

            else
            {
                e.Handled = false;
            }
        }

        private void txtTinhTrang_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.ToString().IndexOfAny(@"0123456789!@#$%^&*()_+=|\{}[]?><.,';:".ToCharArray()) != -1)
            {
                e.Handled = true;
                //Console.WriteLine("Bạn không đc  nhập số hoặc kí tự đặc biêt ");
            }

            else
            {
                e.Handled = false;
            }
        }
        private bool TrungMa(string s)
        {
            List<NhanVien> kq = repNhanVien.LayTatCa().ToList();
            foreach (NhanVien ss in kq)
            {
                if (ss.MaNV == s)
                {
                    return false;
                    //MessageBox.Show("Mã Số Nhân viên đã tồn tại","Thông Báo");
                }
            }
            return true;
        }
        private bool TrungSDT(string s)
        {
            List<NhanVien> kq = repNhanVien.LayTatCa().ToList();
            foreach (NhanVien ss in kq)
            {
                if (ss.SDT == s)
                {
                    return false;
                    //MessageBox.Show("Số Điện Thoại đã tồn tại", "Thông Báo");
                }
            }
            return true;
        }
        private bool TrungCMND(string s)
        {
            List<NhanVien> kq = repNhanVien.LayTatCa().ToList();
            foreach (NhanVien ss in kq)
            {
                if (ss.CMND == s)
                {
                    return false;
                    //MessageBox.Show(" SỐ CMND đã tồn tại","Thông Báo");
                }
            }
            return true;
        }
       
        //các đầu số điện thoại
        private static string[] dauso = new string[] 
        { "090", "091", "097", "098", "092","093" , "094" , "095" , "096" , "099" , "0121" , "0161" , "0188" ,"0199","0633",
        "0162", "0163" ,  "0164" ,"0165" ,"0166" ,"0167" ,"0168" ,"0169" ,"0122" ,"0123" ,"0124" ,"0125" ,"0126" ,"0127" ,"0128" ,"0129"};
        //kiểm tra có phải là số Điện Thoại hay ko?
        private static bool KiemTraSDT(string SDT)
        {
            string SDT1 = "";
            //Bỏ khoảng trắng
            foreach (char item in SDT)
            {
                if (item != 32)
                    SDT1 += item;
            }
            //Kiểm tra xem có phải là số không
            long c = 0;
            if (!long.TryParse(SDT1, out c))
                return false;
            //Kiểm tra số lượng số
            if (SDT1.Length < 10 || SDT1.Length > 11)
            {
                //MessageBox.Show("Số Điện Thoại kHông Đúng");
                return false;
            }
            //Bỏ bớt 7 số sau chỉ lấy đầu số
            var SDT2 = SDT1.Substring(0, SDT.Length - 7);

            //Kiểm tra xem đầu số có nằm trong danh sách đầu số không
            if (!dauso.Contains(SDT2))
                return false;
            return true;
        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            NhanVien nv = new NhanVien();
            nv = LayThongTinTuForm();
            if (repNhanVien.Sua(nv)==true)
            {
                MessageBox.Show("Đã cập nhật lại thông tin nhân viên: " + nv.MaNV);
                LoaDDSNV();
                Reset();
            }
            else
                MessageBox.Show("Sửa nhân viên không thành công");
        }

        private void LV_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (LV.SelectedItems.Count > 0)
                {
                    ListViewItem item = LV.SelectedItems[0];
                    mtxtMa.Text = item.SubItems[0].Text;
                    txtHoTen.Text = item.SubItems[1].Text;
                    dtpNgaysinh.Value = Convert.ToDateTime(item.SubItems[2].Text);
                    txtdiachi.Text = item.SubItems[3].Text;
                    if (item.SubItems[4].Text == "Nam")
                        rdNam.Checked = true;
                    else
                        rdNu.Checked = true;
                    mtxtCMND.Text = item.SubItems[5].Text;
                    txtChucVu.Text = item.SubItems[6].Text;
                    dtpngayvaolam.Value = Convert.ToDateTime(item.SubItems[7].Text);
                    txtTinhTrang.Text = item.SubItems[8].Text;
                    mtxtSDT.Text = item.SubItems[9].Text;
                    txtQueQuan.Text = item.SubItems[10].Text;
                    
                }
            }
            catch { }

        }

        private void btnxoa_Click(object sender, EventArgs e)
        {
            if (LV.CheckedItems.Count > 0)
            {
                if (MessageBox.Show("Bạn có muốn xóa những nhân viên đã chọn", "Thông báo", MessageBoxButtons.OKCancel) == DialogResult.OK) ;
                {
                    foreach (ListViewItem item in LV.CheckedItems)
                    {

                        repNhanVien.Xoa(t => t.MaNV.ToString() == item.SubItems[0].Text);
                        MessageBox.Show("Xóa Nhân Viên Thành công","Thông Báo");
                    }
                    LoaDDSNV();
                    Reset();
                }
            }
            else MessageBox.Show("Chọn  nhân viên cần xóa");
            sttnhanvien.Text= "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (rdMa.Checked)
            {
                LV.Items.Clear();
                List<NhanVien> list = new List<NhanVien>();
                list = repNhanVien.Find(n => n.MaNV.Contains(txtTK.Text)).ToList();
                foreach (NhanVien nv in list)
                {
                    ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                    item.SubItems.Add(nv.HoTen.ToString());
                    item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                    item.SubItems.Add(nv.DiaChi.ToString());
                    string gt = "Nam";
                    if (nv.GioiTinh == false)
                        gt = "Nữ";
                    item.SubItems.Add(gt);
                    item.SubItems.Add(nv.CMND);
                    item.SubItems.Add(nv.ChucVu.ToString());
                    item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                    item.SubItems.Add(nv.TinhTrang.ToString());
                    item.SubItems.Add(nv.SDT.ToString());
                    item.SubItems.Add(nv.QueQuan.ToString());
                    LV.Items.Add(item);
                }
                sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
            }
            else
            {
                if (rdHoten.Checked)
                {
                    LV.Items.Clear();
                    List<NhanVien> list = new List<NhanVien>();
                    list = repNhanVien.Find(n => n.HoTen.Contains(txtTK.Text)).ToList();
                    foreach (NhanVien nv in list)
                    {
                        ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                        item.SubItems.Add(nv.HoTen.ToString());
                        item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                        item.SubItems.Add(nv.DiaChi.ToString());
                        string gt = "Nam";
                        if (nv.GioiTinh == false)
                            gt = "Nữ";
                        item.SubItems.Add(gt);
                        item.SubItems.Add(nv.CMND);
                        item.SubItems.Add(nv.ChucVu.ToString());
                        item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                        item.SubItems.Add(nv.TinhTrang.ToString());
                        item.SubItems.Add(nv.SDT.ToString());
                        item.SubItems.Add(nv.QueQuan.ToString());
                        LV.Items.Add(item);
                    }
                    sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
                }
                else
                {
                    if (rdQue.Checked)
                    {
                        LV.Items.Clear();
                        List<NhanVien> list = new List<NhanVien>();
                        list = repNhanVien.Find(n => n.QueQuan.Contains(txtTK.Text)).ToList();
                        foreach (NhanVien nv in list)
                        {
                            ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                            item.SubItems.Add(nv.HoTen.ToString());
                            item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                            item.SubItems.Add(nv.DiaChi.ToString());
                            string gt = "Nam";
                            if (nv.GioiTinh == false)
                                gt = "Nữ";
                            item.SubItems.Add(gt);
                            item.SubItems.Add(nv.CMND);
                            item.SubItems.Add(nv.ChucVu.ToString());
                            item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                            item.SubItems.Add(nv.TinhTrang.ToString());
                            item.SubItems.Add(nv.SDT.ToString());
                            item.SubItems.Add(nv.QueQuan.ToString());
                            LV.Items.Add(item);
                        }
                        sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
                    }
                    else
                    {
                        if (rdDiachi.Checked)
                        {                            
                            LV.Items.Clear();
                            List<NhanVien> list = new List<NhanVien>();
                            list = repNhanVien.Find(n => n.DiaChi.Contains(txtTK.Text)).ToList();
                            foreach (NhanVien nv in list)
                            {
                                ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                                item.SubItems.Add(nv.HoTen.ToString());
                                item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                                item.SubItems.Add(nv.DiaChi.ToString());
                                string gt = "Nam";
                                if (nv.GioiTinh == false)
                                    gt = "Nữ";
                                item.SubItems.Add(gt);
                                item.SubItems.Add(nv.CMND);
                                item.SubItems.Add(nv.ChucVu.ToString());
                                item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                                item.SubItems.Add(nv.TinhTrang.ToString());
                                item.SubItems.Add(nv.SDT.ToString());
                                item.SubItems.Add(nv.QueQuan.ToString());
                                LV.Items.Add(item);
                            }
                            sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
                        }
                        else
                        {
                            if (rdTinhTrang.Checked)
                            {
                                LV.Items.Clear();
                                List<NhanVien> list = new List<NhanVien>();
                                list = repNhanVien.Find(n => n.TinhTrang.Contains(txtTK.Text)).ToList();
                                foreach (NhanVien nv in list)
                                {
                                    ListViewItem item = new ListViewItem(nv.MaNV.ToString());
                                    item.SubItems.Add(nv.HoTen.ToString());
                                    item.SubItems.Add(nv.NgaySinh.ToShortDateString());
                                    item.SubItems.Add(nv.DiaChi.ToString());
                                    string gt = "Nam";
                                    if (nv.GioiTinh == false)
                                        gt = "Nữ";
                                    item.SubItems.Add(gt);
                                    item.SubItems.Add(nv.CMND);
                                    item.SubItems.Add(nv.ChucVu.ToString());
                                    item.SubItems.Add(nv.NgayVaoLam.ToShortDateString());
                                    item.SubItems.Add(nv.TinhTrang.ToString());
                                    item.SubItems.Add(nv.SDT.ToString());
                                    item.SubItems.Add(nv.QueQuan.ToString());
                                    LV.Items.Add(item);
                                }
                                sttnhanvien.Text = "Cửa hàng hiện đang có: " + LV.Items.Count + " nhân viên";
                            }
                            else                            
                                 MessageBox.Show("Thông tin tìm kiếm chưa chính Xác:", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }
                        
                            
                    }
                }
            }
        }

        private void LV_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (e.Column == lvwColumnSorter.SortingColumnIndex)
            {
                if (lvwColumnSorter.SortingOrder == SortOrder.Ascending)
                    lvwColumnSorter.SortingOrder = SortOrder.Descending;

                else lvwColumnSorter.SortingOrder = SortOrder.Ascending;
            }
            else
            {
                lvwColumnSorter.SortingColumnIndex = e.Column;
                lvwColumnSorter.SortingOrder = SortOrder.Ascending;
            }
            LV.Sort();
        }

        
       

    }
}
